extern unsigned long ia64_iobase;
-struct domain *dom_xen, *dom_io;
+struct domain *dom_xen, *dom_io, *dom_cow;
/*
* This number is bigger than DOMID_SELF, DOMID_XEN and DOMID_IO.
*/
dom_io = domain_create(DOMID_IO, DOMCRF_dummy, 0);
BUG_ON(dom_io == NULL);
+
+ /*
+ * Initialise our DOMID_IO domain.
+ * This domain owns sharable pages.
+ */
+ dom_cow = domain_create(DOMID_COW, DOMCRF_dummy, 0);
+ BUG_ON(dom_cow == NULL);
}
static int
__x = INVALID_MFN; \
__x; })
#else
-#define gfn_to_mfn_private(_d, _gfn) gmfn_to_mfn(rd, act->gfn)
+#define gfn_to_mfn_private(_d, _gfn) gmfn_to_mfn(_d, _gfn)
#endif
#define SHGNT_PER_PAGE_V1 (PAGE_SIZE / sizeof(grant_entry_v1_t))
#include <xen/tmem.h>
#include <asm/current.h>
#include <asm/hardirq.h>
-#include <asm/p2m.h>
+#ifdef CONFIG_X86
+# include <asm/p2m.h>
+#endif
#include <xen/numa.h>
#include <public/memory.h>
#include <xsm/xsm.h>
int guest_remove_page(struct domain *d, unsigned long gmfn)
{
struct page_info *page;
+#ifdef CONFIG_X86
p2m_type_t p2mt;
+#endif
unsigned long mfn;
+#ifdef CONFIG_X86
mfn = mfn_x(gfn_to_mfn(d, gmfn, &p2mt));
+#else
+ mfn = gmfn_to_mfn(d, gmfn);
+#endif
if ( unlikely(!mfn_valid(mfn)) )
{
gdprintk(XENLOG_INFO, "Domain %u page number %lx invalid\n",
}
page = mfn_to_page(mfn);
+#ifdef CONFIG_X86
/* If gmfn is shared, just drop the guest reference (which may or may not
* free the page) */
if(p2m_is_shared(p2mt))
return 1;
}
+#endif /* CONFIG_X86 */
if ( unlikely(!get_page(page, d)) )
{
gdprintk(XENLOG_INFO, "Bad page free for domain %u\n", d->domain_id);
for ( k = 0; k < (1UL << exch.in.extent_order); k++ )
{
+#ifdef CONFIG_X86
p2m_type_t p2mt;
/* Shared pages cannot be exchanged */
rc = -ENOMEM;
goto fail;
}
+#else /* !CONFIG_X86 */
+ mfn = gmfn_to_mfn(d, gmfn + k);
+#endif
if ( unlikely(!mfn_valid(mfn)) )
{
rc = -EINVAL;
#define INVALID_M2P_ENTRY (~0UL)
#define VALID_M2P(_e) (!((_e) & (1UL<<63)))
+#define SHARED_M2P(_e) 0
#define set_gpfn_from_mfn(mfn, pfn) (machine_to_phys_mapping[(mfn)] = (pfn))
#define get_gpfn_from_mfn(mfn) (machine_to_phys_mapping[(mfn)])
unsigned long domain_get_maximum_gpfn(struct domain *d);
-extern struct domain *dom_xen, *dom_io; /* for vmcoreinfo */
+extern struct domain *dom_xen, *dom_io, *dom_cow; /* for vmcoreinfo */
#endif /* __ASM_IA64_MM_H__ */